package com.jiangnan.util

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle

/**
 * NavigationUtil 是一个通用的页面跳转工具类，
 * 提供多种重载方法以满足不同的跳转需求。
 */
object NavigationUtil {

    /**
     * 基础方法：仅传递上下文和目标 Activity 类
     *
     * @param context 当前上下文
     * @param destination 目标 Activity 类
     */
    fun navigateTo(context: Context, destination: Class<*>) {
        navigateTo(context, destination, extras = null, finishCurrent = false, flags = null)
    }

    /**
     * 重载方法：传递上下文、目标 Activity 类，并决定是否结束当前 Activity
     *
     * @param context 当前上下文
     * @param destination 目标 Activity 类
     * @param finishCurrent 若为 true，跳转后结束当前 Activity
     */
    fun navigateTo(context: Context, destination: Class<*>, finishCurrent: Boolean) {
        navigateTo(context, destination, extras = null, finishCurrent = finishCurrent, flags = null)
    }

    /**
     * 重载方法：传递上下文、目标 Activity 类以及参数 Bundle
     *
     * @param context 当前上下文
     * @param destination 目标 Activity 类
     * @param extras Bundle 数据，传递给目标 Activity
     */
    fun navigateTo(context: Context, destination: Class<*>, extras: Bundle?) {
        navigateTo(context, destination, extras, finishCurrent = false, flags = null)
    }

    /**
     * 重载方法：传递上下文、目标 Activity 类、参数 Bundle 以及是否结束当前 Activity 的标志
     *
     * @param context 当前上下文
     * @param destination 目标 Activity 类
     * @param extras Bundle 数据
     * @param finishCurrent 若为 true，跳转后结束当前 Activity
     */
    fun navigateTo(context: Context, destination: Class<*>, extras: Bundle?, finishCurrent: Boolean) {
        navigateTo(context, destination, extras, finishCurrent, flags = null)
    }

    /**
     * 最全方法：传递上下文、目标 Activity 类、参数 Bundle、是否结束当前 Activity 和 Intent 标志
     *
     * @param context 当前上下文
     * @param destination 目标 Activity 类
     * @param extras Bundle 数据（可为 null）
     * @param finishCurrent 若为 true，跳转后结束当前 Activity
     * @param flags Intent 标志（可为 null），如 Intent.FLAG_ACTIVITY_CLEAR_TOP
     */
    fun navigateTo(
        context: Context,
        destination: Class<*>,
        extras: Bundle? = null,
        finishCurrent: Boolean = false,
        flags: Int? = null
    ) {
        val intent = Intent(context, destination)
        extras?.let {
            intent.putExtras(it)
        }
        flags?.let {
            intent.flags = it
        }
        context.startActivity(intent)
        if (finishCurrent && context is Activity) {
            context.finish()
        }
    }

    /**
     * 高级重载：允许通过 lambda 对 Intent 进行自定义设置
     *
     * @param context 当前上下文
     * @param destination 目标 Activity 类
     * @param intentModifier 一个 lambda，可用于对 Intent 进行额外修改，如添加标志或附加数据
     * @param finishCurrent 若为 true，跳转后结束当前 Activity
     */
    fun navigateTo(
        context: Context,
        destination: Class<*>,
        intentModifier: (Intent) -> Unit,
        finishCurrent: Boolean = false
    ) {
        val intent = Intent(context, destination)
        intentModifier(intent)  // 允许调用者自定义 Intent
        context.startActivity(intent)
        if (finishCurrent && context is Activity) {
            context.finish()
        }
    }
}
